<?php
// +-------------------------------------------------------------------------------
// | DingZone [ A Rapid Development Framework For Dingtalk ]
// +-------------------------------------------------------------------------------
// | 钉钉回调Tag枚举 v1.0
// |
// | Copyright (c) 2014-2018 http://www.heimalanshi.com All rights reserved.
// | Author : Jie
// | Date : 2018-08-09
// +-------------------------------------------------------------------------------

namespace ding\model;

/**
 * 通讯录回调事件类型枚举
 * @package ding\model
 */
class CallbackTagEnum {

    const USER_ADD_ORG = 'user_add_org'; //通讯录用户增加
    const USER_MODIFY_ORG = 'user_modify_org'; //通讯录用户更改
    const USER_LEAVE_ORG = 'user_leave_org'; //通讯录用户离职
    const ORG_ADMIN_ADD = 'org_admin_add'; //通讯录用户被设为管理员
    const ORG_ADMIN_REMOVE = 'org_admin_remove'; //通讯录用户被取消设置管理员
    const ORG_DEPT_CREATE = 'org_dept_create'; //通讯录企业部门创建
    const ORG_DEPT_MODIFY = 'org_dept_modify'; //通讯录企业部门修改
    const ORG_DEPT_REMOVE = 'org_dept_remove'; //通讯录企业部门删除
    const ORG_REMOVE = 'org_remove'; //企业被解散
    const ORG_CHANGE = 'org_change'; //企业信息发生变更
    const LABEL_USER_CHANGE = 'label_user_change'; //员工角色信息发生变更
    const LABEL_CONF_ADD = 'label_conf_add'; //增加角色或者角色组
    const LABEL_CONF_DEL = 'label_conf_del'; //删除角色或者角色组
    const LABEL_CONF_MODIFY = 'label_conf_modify'; //修改角色或者角色组

    const CHAT_ADD_MEMBER = 'chat_add_member'; //群会话添加人员
    const CHAT_REMOVE_MEMBER = 'chat_remove_member'; //群会话删除人员
    const CHAT_QUIT = 'chat_quit'; //群会话用户主动退群
    const CHAT_UPDATE_OWNER = 'chat_update_owner'; //群会话更换群主
    const CHAT_UPDATE_TITLE = 'chat_update_title'; //群会话更换群名称
    const CHAT_DISBAND = 'chat_disband'; //群会话解散群
    const CHAT_DISBAND_MICROAPP = 'chat_disband_microapp'; //绑定了微应用的群会话，在解散时回调
    const CHECK_IN = 'check_in';//签到
    const BPMS_TASK_CHANGE = 'bpms_task_change';//审批任务状态变化
    const BPMS_INSTANCE_CHANGE = 'bpms_instance_change';//审批实例状态变化

    /**
     * 获取所有的tag
     *
     * @return array
     * @throws \ReflectionException
     */
    public static function all() {
        $ref = new \ReflectionClass(get_called_class());
        $constans = $ref->getConstants();
        return array_values($constans);
    }

    public static function group() {
        return [
            '通讯录' => [
                self::USER_ADD_ORG => '通讯录用户增加',
                self::USER_MODIFY_ORG => '通讯录用户更改',
                self::USER_LEAVE_ORG => '通讯录用户离职',
                self::ORG_ADMIN_ADD => '通讯录用户被设为管理员',
                self::ORG_ADMIN_REMOVE => '通讯录用户被取消设置管理员',
                self::ORG_DEPT_CREATE => '通讯录企业部门创建',
                self::ORG_DEPT_MODIFY => '通讯录企业部门修改',
                self::ORG_DEPT_REMOVE => '通讯录企业部门删除',
                self::LABEL_USER_CHANGE => '员工角色信息发生变更',
                self::LABEL_CONF_ADD => '增加角色或者角色组',
                self::LABEL_CONF_DEL => '删除角色或者角色组',
                self::LABEL_CONF_MODIFY => '修改角色或者角色组',
                self::CHAT_ADD_MEMBER => '群会话添加人员',
                self::CHAT_REMOVE_MEMBER => '群会话删除人员',
                self::CHAT_QUIT => '群会话用户主动退群',
                self::CHAT_UPDATE_OWNER => '群会话更换群主',
                self::CHAT_UPDATE_TITLE => '群会话更换群名称',
                self::CHAT_DISBAND => '群会话解散',
                self::CHAT_DISBAND_MICROAPP => '绑定了微应用的群会话解散',
                self::ORG_REMOVE => '企业被解散',
                self::ORG_CHANGE => '企业信息发生变更',
            ],
            '审批' => [
                self::BPMS_TASK_CHANGE => '审批任务状态变化',
                self::BPMS_INSTANCE_CHANGE => '审批实例状态变化'
            ],
            '其他' => [
                self::CHECK_IN => '签到'
            ]
        ];
    }
}